✒️ 2025-05-28 16:08 내용 수정
SQL 함수
SQL에서 기본적으로 제공하는 함수
문자 함수
| 함수 |
설명 |
| ASCII |
지정된 문자의 ASCII값 반환 |
| RPAD |
왼쪽 정렬 후 오른쪽에 지정한 문자 삽입 |
| LPAD |
오른쪽 정렬 후 왼쪽에 지정한 문자 삽입 |
| TRIM |
문자열의 시작 이전 지점과 끝 이후 지점의 공백 제거 |
| RTRIM |
문자열 오른쪽(끝 이후) 공백 제거 |
| LTRIM |
문자열 왼쪽(시작 이전) 공백 제거 |
| LOWER 또는 LCASE |
지정된 문자를 모두 소문자로 변환 |
| UPPER 또는 UCASE |
지정된 문자를 모두 대문자로 변환 |
| LOCATE 또는 POSITION |
특정 문자의 위치(INDEX)를 반환 |
| INSTR |
특정 문자의 위치(INDEX)를 반환, LOCATE의 인자 2개 버전 |
| LENGTH |
문자열의 길이를 반환 |
| SUBSTRING 또는 SUBSTR |
선택 위치(INDEX)부터 원하는 길이의 문자를 반환. 문자열 추출 |
| REPLACE |
문자열의 첫 번째 파라미터 문자를 두 번째 파라미터 문자로 변환 |
| CONCAT |
두 문자열을 연결한 결과를 반환 |
| STR_TO_DATE |
문자를 날짜로 변경 |
1. ASCII
SELECT ASCII(str);
2. RPAD와 LPAD
- 문자열의 길이가 총 문자열 길이보다 작으면 빈 공간을 '삽입할문자'로 채운다.
- 문자열의 길이가 총 문자열 길이보다 크다면 총 문자열 길이까지만 표시된다.
-- RPAD
SELECT RPAD(문자열 , 총문자열길이, '삽입할문자');
-- LPAD
SELECT LPAD(문자열 , 총문자열길이, '삽입할문자');
3. TRIM, RTRIM, LTRIM
-- TRIM
SELECT TRIM('문자열');
SELECT TRIM('문자' FROM '원본문자열'); -- 원본 문자열에서 문자를 공백으로 처리한다
-- RTRIM
SELECT RTRIM('문자열';
-- LTRIM
SELECT LTRIM('문자열');
4. LOWER, UPPER
-- LOWER
SELECT LOWER('문자열');
-- UPPER
SELECT UPPER('문자열');
5. LOCATE
SELECT LOCATE('검색할문자', '문자열');
SELECT LOCATE('검색할문자', '문자열', INDEX); -- 지정한 INDEX 부터 검색시작 (기본값 1)
6. INSTR
- LOCATE에서 인자를 2개만 받는 것과 동일하지만, 받는 인자의 순서가 반대다.
SELECT INSTR('문자열', '검색할문자');
7. LENGTH
SELECT LENGTH ('문자열');
8. SUBSTR, REPLACE, CONCAT
- CONCAT()에서 인자에 NULL이 있으면 NULL을 반환한다.
-- SUBSTR
SELECT SUBSTR('문자열', INDEX, LENGTH);
-- REPLACE
SELECT REPLACE ('문자열', '문자나문자열', '바꿀문자');
-- CONCAT
SELECT CONCAT ('문자열1 ', '문자열2', ...);
9. STR_TO_DATE
SELECT STR_TO_DATE('문자열', '날짜형식');
SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
숫자 함수
| 함수 |
설명 |
| ABS |
절댓값(absolute) 반환 |
| ROUND |
특정 자릿수를 반올림하여 반환 |
| FLOOR |
주어진 숫자보다 작거나 정수 중에서 주어진 숫자와 같은 값의 최대값을 반환 |
| CEIL |
주어진 숫자보다 크거나 정수 중에서 주어진 숫자와 같은 값의 최소값을 반환 |
| TRUNCATE |
특정 자릿수에서 잘라낸 결과를 반환 |
| SIGN |
주어진 값의 음수, 정수, 0 여부를 반환 |
| MOD |
나누기 후 나머지를 반환 |
| POWER 또는 POW |
주어진 숫자의 거듭 제곱을 반환 |
1. ABS
SELECT ABS(숫자);
2.ROUND
- 전달 받은 자릿수가 양수라면 소수점 아래 자리를, 음수라면 정수 부분에서 반올림을 한다.
- 기본값은 0이며, 0은 소수점 아래 첫 번째 자릿수이다.
SELECT ROUND(숫자, 자릿수);
3. FLOOR, CEIL
-- FLOOR
SELECT FLOOR(숫자);
-- CEIL
SELECT CEIL(숫자);
4. TRUNCATE
- ROUND처럼 전달 받은 자릿수가 양수라면 소수점 아래 자릿수를, 음수라면 정수 부분 자릿수 이하를 잘라낸다.
- 기본값은 0이며, 0은 소수점 아래 첫 번째 자릿수이다.
- FLOOR와 비슷한 동작을 하는 것처럼 보이나, 음수에 특히 차이를 보인다.
- TRUNC는 전달 받은 자릿수 이하를 단순 제거(0으로 처리)하지만, FLOOR는 전달 받은 숫자보다 작은 정수들 중에서 최대값을 반환한다.
SELECT TRUNCATE(숫자, 자릿수);
5. SIGN
- 전달 받은 인자가 음수면 -1을, 0이면 0을, 양수면 1을, NULL이면 NULL을 반환
SELECT SIGN(숫자);
6. MOD
- Java와 JavaScript의 % 연산처럼 나누기 진행 후 나머지를 반환한다.
SELECT MOD(분모, 분자);
7. POWER
SELECT POWER(숫자, 거듭제곱);
날짜 및 시간 함수
날짜 형식
| 형식 |
0 값 |
|
형식 |
설명 |
| DATE |
'0000-00-00' |
|
YYYY |
연도 |
| TIME |
'00:00:00' |
|
MM |
월 |
| DATETIME |
'0000-00-00 00:00:00' |
|
DD |
일 |
| TIMESTAMP |
'0000-00-00 00:00:00' |
|
hh |
시간 |
| YEAR |
0000 |
|
mm |
분 |
|
|
|
ss |
초 |
1. 날짜
| 함수 |
설명 |
| NOW |
현재 날짜를 반환 |
| YEAR |
주어진 날짜의 연도를 반환 |
| MONTH |
주어진 날짜의 월을 반환 |
| DAYOFMONTH 또는 DAY |
주어진 날짜의 일을 반환 |
| DATE_ADD |
날짜에 기간(INTERVAL)을 더함 |
| DATE_SUB |
날짜에서 기간(INTERVAL)을 뺌 |
| DATEDIFF |
날짜 A에서 날짜 B를 뺀 일 수를 반환 |
| TO_DAYS |
주어진 날짜를 일 수로 변환 |
- NOW
NOW() -- 현재 날짜
- YEAR, MONTH, DAYOFMONTH
-- YEAR()
SELECT YEAR('date');
-- MONTH()
SELECT MONTH('date');
-- DAYOFMONTH() 또는 DAY()
SELECT DATOFMONTH('date');
SELECT DAY('date');
- DATE_ADD, DATE_SUB, DATEDIFF
-- DATE_ADD
SELECT DATE_ADD('date1', INTERVAL 기간 단위);
-- DATE_SUB
SELECT DATE_ADD('date1', INTERVAL 기간 단위);
-- DATEDIFF
SELECT DATEDIFF('date1', 'date2');
- TO_DAYS
SELECT TO_DAYS('date');
2. 시간
| 함수 |
설명 |
| CURTIME |
현재 시간을 반환 |
| TIME |
표현식에서 시간 부분을 추출 |
| SECOND |
초를 반환 |
| TIME_FORMAT |
시간 형식으로 표현 |
| TIME_TO_SEC |
전달 받은 인자를 초로 변환 |
| SEC_TO_TIME |
초를 'hh:mm:ss' 형식으로 변환 |
| TO_SECONDS |
표현식에서 초로 변환 |
- CURTIME
SELECT CURTIME();
- TIME, SECOND
-- TIME
SELECT TIME('time');
-- SECOND
SELECT SECOND('time');
- TIME_FORMAT, TIME_TO_SEC, SEC_TO_TIME, TO_SECONDS
-- TIME_FORMAT
SELECT TIME_FORMAT('time', '시간형식');
-- TIME_TO_SEC
SELECT TIME_TO_SEC('time');
-- TIME_FORMAT
SELECT SEC_TO_TIME(seconds);
-- TIME_TO_SEC
SELECT TO_SECONDS(표현식);
NULL 처리 함수
| 함수 |
설명 |
| NULLIF |
두 파라미터의 값을 비교해서 같으면 NULL을, 다르면 첫 번째 파라미터 값을 반환 |
1. NULLIF
SELECT NULLIF(비교값1, 비교값2);
순위 함수와 집계 함수
- 일반적으로 COUNT와 집계 함수는 같이 조회할 수 없다.
| 함수 |
설명 |
| RANK |
그룹 내 순위를 계산해서 NUMBER 타입으로 순위를 반환. 중복 순위도 계산한다. |
| DENSE_RANK |
그룹 내 순위를 계산해서 NUMBER 타입으로 순위를 반환. 중복 순위는 계산하지 않는다. |
| COUNT |
행의 개수(차수)를 반환 |
| MIN |
행들의 최소값을 반환 |
| MAX |
행들의 최대값을 반환 |
| SUM |
행들의 합계를 반환 |
| AVG |
행들의 평균을 반환 |
| STDDEV |
행들의 표준 편차를 반환 |
| VARIANCE |
행들의 분산을 반환 |
1. RANK, DENSE_RANK
- RANK() OVER(ORDER BY 컬럼명 정렬순서) 형식으로 작성하며, 반드시 OVER 내부에 ODER BY 표현이 있어야 한다.
-- RANK
SELECT RANK() OVER(ORDER BY 컬럼명 정렬순서) FROM 테이블명;
-- DENSE_RANK
SELECT DENSE_RANK() OVER(ORDER BY 컬럼명 정렬순서) FROM 테이블명;
2. COUNT
- COUNT 사용 시 중복되는 컬럼 속성을 제외하고 행의 수를 얻고 싶다면 DISTINCT를 사용한다.
- COUNT(*)는 NULL을 포함한 모든 행을 체크하며, COUNT(컬럼명)은 NULL을 제외한다.
SELECT COUNT(*) FROM 테이블명; -- 전체 행의 수 출력
SELECT COUNT(표현식) FROM 테이블명; -- NULL 값을 카운트하지 않는다
SELECT COUNT(DISTINCT 표현식) FROM 테이블명; -- 중복되는 컬럼 속성을 제외한 행의 수 출력
3. MIN, MAX
-- MIN
SELECT MIN(컬럼명) FROM 테이블명;
-- MAX
SELECT MAX(컬럼명) FROM 테이블명;
4. SUM
SELECT SUM(컬럼명) FROM 테이블명;
5. AVG
SELECT AVG(컬럼명) FROM 테이블명;
6. STDDEV, VARIANCE
-- STDDEV
SELECT STDDEV(컬럼명) FROM 테이블명; -- VARIANCE의 양의 제곱근
-- VARIANCE
SELECT VARIANCE(컬럼명) FROM 테이블명;
타입 변환 함수
1. CAST
- 데이터 타입을 변환할 때 사용한다.
- 주로 문자열을 정수, 부동 소수점, 날짜 등으로 변환하거나 그 반대로 변환할 때 사용한다.
- 이를 이용해 정수로 변환된 문자열과 다른 정수를 비교할 수도 있다.
CAST(expression AS datatype)
-- 특정 문자열을 정수로 변환
CAST(test_string AS UNSIGNED)
-- 아래처럼 사용할 수도 있다.
-- test_string = '15'와 같은 상황일 때
SELECT * FROM TEST WHERE CAST(test_string AS UNSIGNED) > 10